import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from '@/router/routes'
import store from '@/store'
import {deleteUserTokenInLocal} from '@/utils/auth'

Vue.use(VueRouter)

//缓存原来的push、replace
const originalPush = VueRouter.prototype.push
const originalReplace = VueRouter.prototype.replace

//增强push
VueRouter.prototype.push = function(location, okCallback, errCallback) {
        //若程序员使用push的时候，没有传递成功、失败的回调，那就靠catch
        if (okCallback === undefined && errCallback === undefined) {
            return originalPush.call(this, location).catch(() => {})
        } else {
            //若程序员使用push的时候，传递了成功、失败的回调，那就用
            return originalPush.call(this, location, okCallback, errCallback)
        }
    }
    //增强replace
VueRouter.prototype.replace = function(location, okCallback, errCallback) {
    //若程序员使用push的时候，没有传递成功、失败的回调，那就靠catch
    if (okCallback === undefined && errCallback === undefined) {
        return originalReplace.call(this, location).catch(() => {})
    } else {
        //若程序员使用push的时候，传递了成功、失败的回调，那就用
        return originalReplace.call(this, location, okCallback, errCallback)
    }
}


const router = new VueRouter({
  mode:'history',
	routes,
	//scrollBehavior函数何时调用？—— 每次路由规则匹配时，都会执行。
	scrollBehavior(to,from,savedPosition){
		if (savedPosition) {
			//能进入判断，就意味着用户绝对是通过浏览器的前进、后退按钮操作路由了
			return savedPosition //保留住跳转之前的位置
		} else {
			//用户是通过项目中的交互操作的路由，那么每次跳转滚动条都在最上方
			return { x: 0, y: 0 } 
		}
	}
})


// router.beforeEach(async(to,from,next)=>{
// 	//获取vuex中的userToken、userInfo
// 	const {userToken,userInfo} = store.state.user
// 	//校验用户是否登录过
// 	if(userToken){
// 		//登录了
// 		// console.log('有token，你登录过了，我再去看看vuex里有没有你的信息')
// 		//校验vuex中是否有用户信息
// 		if(userInfo.id){
// 			//有用户信息
// 			// console.log('有token，vuex中也有你的信息，没毛病，你去哪我都让，放行了！')
// 			next() //放行（该去哪就去哪）
// 		}else{
// 			// console.log('有token，但vuex中没有你的信息，我拿着token去请求你的信息')
// 			try {
// 				//拿着token去请求用户信息
// 				await store.dispatch('getUserInfo')
// 				//若请求回来了
// 				// console.log('你的信息请求成功，而且已经存入vuex了，没毛病了，我给你放行了！')
// 				next()
// 			} catch (error) {
// 				// console.log('请求你的信息失败，你的token失效了，我会清空local里的userToken，也会清空vuex里的userToken、userInfo,打回登录')
// 				//若没请求回来（例如：token过期了、有人顶号了）
// 				deleteUserTokenInLocal() //删除local中的token
// 				store.state.user.userInfo = {} //重置vuex中的userInfo
// 				store.state.user.userToken = '' //重置vuex中的userToken
// 				next('/login')
// 			}
// 		}
// 	}else{
// 		//未登录
// 		if(authPath.some(item => to.path === item)){
// 			//没登录，却还要访问那些，只有登录后才能看的路由 —— 打回""
// 			next('/login')
// 		}else{
// 			next()
// 		}
// 	}
// })

//暴露路由器
export default router

